#ifndef _FNT_PLUGIN_MANAGER_H_
#define _FNT_PLUGIN_MANAGER_H_

/*
class GraphReader;
*/
class Plugin;
class GraphReaderInfo;
class AlgorithmInfo;
class AlgFind;
class AlgConn;
class AlgRefine;
template<typename> class AlgInfo;
template<typename, typename> class QPair;
template<typename> class QList;

struct PluginManagerPriv;
class PluginManager {
	friend struct PluginManagerPriv;
	PluginManagerPriv*const priv;

	static PluginManager* _instance;

	PluginManager();

	public:
	static PluginManager* instance() {
		if(!_instance)
			_instance=new PluginManager{};
		return _instance;
	}
	~PluginManager();

	const QList<const Plugin*>& plugins() const;

	const QList<QPair<const AlgorithmInfo*, const Plugin*>>& algs() const;
	const QList<const AlgInfo<AlgFind>*>& algsFind() const;
	const QList<const AlgInfo<AlgConn>*>& algsConn() const;
	const QList<const AlgInfo<AlgRefine>*>& algsRefine() const;

	const QList<QPair<const GraphReaderInfo*, const Plugin*>>& graphReaders() const;

};

#endif
